<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1. 必须用 var 声明变量，不允许使用未声明的变量
            // "use strict"
            // a = "str";
            // console.log(a);
        // 2. 禁止自定义的函数中的 this 指向 window。改变函数中默认的this。
            // "use strict" 
            // function fn(){
            //     console.log(this); //undefined
            // }

            // fn();
        // 3. 创建 eval 作用域,将eval当中的代码，以局部作用域执行。
            // "use strict"

            // eval("var a = 'eval'; console.log(a)")
            // eval("var a = 'eval';")

            // console.log(a);
        // 4. 对象不能有重名的属性（Chrome 已经修复了这个 Bug，IE 还会出现）
                // "use strict"
                // var obj = {
                //     a:12,
                //     b:5,
                //     b:666
                // }

                // console.log(obj.b);
        // 5. 函数不能有重复的形参
                // "use strict"

                // Uncaught SyntaxError: Duplicate parameter name not allowed in this
                // function fn(a,b,b){
                //     console.log(a,b,b); 
                // }

                // fn(5,888,666)

        // 6. 新增一些保留字, 如: implements interface private protected public
                // "use strict"    
                
                // Uncaught SyntaxError: Unexpected strict mode reserved word
                // var interface = 'lalala';

                // console.log(interface);

        // 7. 使用call、apply传第一个参数为null或undefined时，this值不会跳转到全局对象
                "use strict"

               var str = 'abc';

               function fn(){
                   console.log(this);
               }

            //   fn.call(); //undefined
            //   fn.call(undefined)//undefined
            //   fn.call(null)//null

            fn.apply()
            fn.apply(undefined)
            fn.apply(null)

            fn.apply(str)

              

    </script>
</body>
</html>